package com.shujia.day06;

public class Demo01Interface {
    public static void main(String[] args) {
        /*
            TODO 接口：
                1.为什么需要接口？
                    对于某一些类来说，需要对其添加一些额外的拓展功能，但是这些功能，需要在具体的类中具有不同的实现方式
                    对于个人电脑来说，为了增加其功能，提供了一些接口 类似于 use接口 雷电3接口等等
                       通过这样的一些接口，那么可以给电脑添加额外的功能：通过use连接鼠标，硬盘，或者添加一些显示设备
                    对于定义的Java类来说也是为了其能增加一些行为
                2.怎么使用接口？
                    接口用关键字interface表示
                    格式：interface 接口名 {}
                    接口本身并没有提供具体的行为方式，所以需要具体的类来实现
                    类实现接口用implements表示
                    格式：class 类名 implements 接口名 {}
                    注意：对于类要实现接口，那么要求实现其接口中的抽象方法，或者当前类是一个抽象类
                3.接口和类的关系
                    接口只定义规范，标记了当前接口的 方法名称 传入的参数类型 以及返回值类型
                    类是需要实现具体接口提供规范的执行逻辑
                4.当一个类需要继承父类和实现接口时，如何编写？
                    extends Cat implements Domestication {  先继承后实现
                5.接口是否可以多实现？
                    可以的，implements 接口1,接口2  没有钻石问题
                6.接口是否存在实现对象
                    接口是抽象的，不能被实例化
                7.当接口作为参数被使用时，那么可以将接口的实现类对象传入到当前方法中进行使用
                    为什么要使用接口作为参数类型？
                        当前接口的方法规范已经给出，但是没有具体实现，那么此时，可以对类中的方法
                          调用该接口中抽象的方法，等到某个实现类实现了该方法，那么就可以对当前类中方法进行使用
                        对于现实场景来说，一种方法的执行逻辑可能会有很多中，为了增加Java的拓展性以及容错性
                            降低耦合性上来说，接口是一个很好的选择



         */
        System.out.println(new DomesticationCat().compute(2, 3));

        // 具体的编程脑机接口
        ProgrammingInterfaceType programmingInterfaceType = new ProgrammingInterfaceType();

        // new DomesticationCat() 被神化后的猫对象 想要让其编程 要接入Java的脑机
        new DomesticationCat().programming(programmingInterfaceType);


    }
}

interface USB {
    public void use3(String type);
}

class Agreement {

}


class Computer implements USB {

    public void watchMovie() {
        System.out.println("电脑可以看电影");
    }

    public void input() {
        System.out.println("电脑可以使用自带的键盘触摸板来接受信息");
    }

    @Override
    public void use3(String type) {
        if (type.equals("鼠标")) {
            System.out.println("开始调用鼠标的功能，可以进行输入设备的移动数据");
        } else if (type.equals("键盘")) {
            System.out.println("开始调用键盘的功能，可以进行输入设备的指令数据");
        } else if (type.equals("硬盘")) {
            System.out.println("开始调用硬盘的功能，可以进行读取数据");
        } else {
            System.out.println("设备识别错误...无法调用");
        }
    }
}

class Equipment implements USB {

    @Override
    public void use3(String type) {
        if (type.equals("天线")) {
            System.out.println("可以接收雷达信号");
        } else {
            System.out.println("识别错误，无法调用..");
        }
    }
}

interface Domestication {

    public String compute(int x, int y);
}

interface Apotheosis{
    public void programming(InterfaceType interfaceType);
}


class Cat {
    public void eat() {
        System.out.println("🐱会吃猫粮");
    }
}


class DomesticationCat extends Cat implements Domestication,Apotheosis {

    @Override
    public String compute(int x, int y) {
        String res = "";
        for (int i = 0; i < x + y; i++) {
            res += "喵";
        }
        return res;
    }

    @Override
    public void programming(InterfaceType interfaceType) {
//        if (interfaceType.equals("编程接口")){
//            System.out.println("🐱可以完成编程任务");
//        }else {
//            System.out.println("猫被神话，可以完成很多任务...");
//        }
        boolean res = interfaceType.programmingType("Java");
        if (res){
            System.out.println("🐱可以完成Java编程任务");
        }else {
            System.out.println("接口连接失败,需要再次尝试...");
        }

    }
}

interface InterfaceType{
    public boolean programmingType(String language);
}

/*
    可以编程的脑机接口
        可以让 实现 Apotheosis 神化接口的类 进行调用其programming方法
 */
class ProgrammingInterfaceType implements InterfaceType{

    @Override
    public boolean programmingType(String language) {
        if (language.equals("Java")){
            System.out.println("看来您想使用Java这项神迹，现在赋予给你...");
            System.out.println("...");
            System.out.println("你会了");
            return true;
        }else {
            System.out.println("现在该脑机接口只会Java，其他的请使用其他脑机接口");
            System.out.println("...");
            return false;
        }
    }
}